import {
	baseUrl
} from '@/common/url'
export default {
	// 判断是否有操作权限
	hasPermissions(key) {
		// #ifndef H5
		let permissions = uni.getStorageSync('permissions') || []
		if (permissions[0] == "*:*:*") {
			return true
		} else {
			if (Array.isArray(key)) {
				return permissions.some(i => key.includes(i));
			} else {
				return permissions.includes(key)
			}
		}
		// #endif
		// #ifdef H5
		return true;
		// #endif
	},
	// 图片预览
	previewImg(list, index) {
		uni.previewImage({
			urls: list,
			current: index
		})
	},
	uploadFile(files) {
		let token = uni.getStorageSync('token')
		// let tokenName = uni.getStorageSync('tokenName')
		let header = {}
		header['yrt'] = token
		const uploadTasks = files.map((file, index) => {
			return new Promise((resolve, reject) => {
				uni.uploadFile({
					url: baseUrl + '/attachment/upload', // 接口地址
					filePath: file.path, // 临时文件路径
					name: 'file',
					header: header,
					success: function(res) {
						resolve(JSON.parse(res.data).data)
					},
					fail: function(err) {
						reject(err)
					}
				})
			})
		})
		uni.showLoading({
			mask: true,
			title: '上传中...'
		})
		return new Promise((resolve, reject) => {
			Promise.all(uploadTasks)
				.then((res) => {
					resolve(res)
					uni.hideLoading()
					uni.showToast({
						icon: 'none',
						title: '上传成功！'
					})
				})
				.catch((err) => {
					console.log('上传失败', err)
					uni.hideLoading()
					reject()
				})
		})

	},
	// 计算
	count(type, a, b) {
		switch (type) {
			case 'add':
				return MathCalc.sum(a, b)
				break;
			case 'subtract':
				return MathCalc.sub(a, b)
				break;
			case 'multiply':
				return MathCalc.mul(a, b)
				break;
			case 'divide':
				return MathCalc.div(a, b)
				break;
			default:
				break;
		}
	},
	// 时间戳差计算 小时分钟
	countHourMinute(diff) {
		// const hours = Math.floor(diff / (60 * 60))
		// const minutes = Math.floor((diff - (60 * 60) * hours) / 60)
		// return `${hours.toString().padStart(2, '0')}小时${minutes.toString().padStart(2, '0')}分钟`
		const minutes = Math.floor(diff / 60)
		return `${minutes.toString().padStart(2, '0')}分钟`
	},
	// 页面跳转
	pageJump(url) {
		uni.navigateTo({
			url: url
		})
	},
	callPhone(phone) {
		uni.makePhoneCall({
			phoneNumber: phone
		});
	},
	showToastSuccess() {
		uni.showToast({
			icon: 'none',
			title: '操作成功！'
		})
	}
}
const MathCalc = {
	/**
	 ** 加法函数，用来得到精确的加法结果
	 ** 说明：javascript 的加法结果会有误差，在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
	 ** 调用：sum(arg1,arg2)
	 ** 返回值：arg1 加上 arg2 的精确结果
	 **/
	sum(arg1, arg2) {
		let r1, r2
		try {
			r1 = arg1.toString().split('.')[1].length
		} catch (e) {
			r1 = 0
		}
		try {
			r2 = arg2.toString().split('.')[1].length
		} catch (e) {
			r2 = 0
		}
		const c = Math.abs(r1 - r2)
		const m = Math.pow(10, Math.max(r1, r2))
		if (c > 0) {
			const cm = Math.pow(10, c)
			if (r1 > r2) {
				arg1 = Number(arg1 ? arg1.toString().replace('.', '') : '0')
				arg2 = Number(arg2 ? arg2.toString().replace('.', '') : '0') * cm
			} else {
				arg1 = Number(arg1 ? arg1.toString().replace('.', '') : '0') * cm
				arg2 = Number(arg2 ? arg2.toString().replace('.', '') : '0')
			}
		} else {
			arg1 = Number(arg1 ? arg1.toString().replace('.', '') : '0')
			arg2 = Number(arg2 ? arg2.toString().replace('.', '') : '0')
		}
		return (arg1 + arg2) / m
	},
	/**
	 ** 减法函数，用来得到精确的减法结果
	 ** 说明：javascript 的减法结果会有误差，在两个浮点 g2)会比较明显。这个函数返回较为精确的减法结果。
	 ** 调用：sub(arg1,arg2)
	 ** 返回值：arg1 加上 arg2 的精确结果
	 **/
	sub(arg1, arg2) {
		let r1, r2
		try {
			r1 = arg1.toString().split('.')[1].length
		} catch (e) {
			r1 = 0
		}
		try {
			r2 = arg2.toString().split('.')[1].length
		} catch (e) {
			r2 = 0
		}
		const c = Math.abs(r1 - r2)
		const m = Math.pow(10, Math.max(r1, r2))
		if (c > 0) {
			const cm = Math.pow(10, c)
			if (r1 > r2) {
				arg1 = Number(arg1 ? arg1.toString().replace('.', '') : '0')
				arg2 = Number(arg2 ? arg2.toString().replace('.', '') : '0') * cm
			} else {
				arg1 = Number(arg1 ? arg1.toString().replace('.', '') : '0') * cm
				arg2 = Number(arg2 ? arg2.toString().replace('.', '') : '0')
			}
		} else {
			arg1 = Number(arg1 ? arg1.toString().replace('.', '') : '0')
			arg2 = Number(arg2 ? arg2.toString().replace('.', '') : '0')
		}
		return (arg1 - arg2) / m
	},
	/**
	 ** 乘法函数，用来得到精确的乘法结果
	 ** 说明：javascript 的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
	 ** 调用：mul(arg1,arg2)
	 ** 返回值：arg1 乘以 arg2 的精确结果
	 **/
	mul(arg1, arg2) {
		let m = 0
		const s1 = !arg1 ? '' : arg1.toString()
		const s2 = !arg2 ? '' : arg2.toString()
		try {
			m += s1.split('.')[1].length
		} catch (e) {
			// console.log('🚀85 行 e ➡️', e)
		}
		try {
			m += s2.split('.')[1].length
		} catch (e) {
			// console.log('🚀90 行 e ➡️', e)
		}
		if ((arg1 && arg2) || arg1 == 0 || arg2 == 0) {
			return ((Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) /
				Math.pow(10, m)
			)
		} else {
			return null
		}

	},
	/**
	 ** 除法函数，用来得到精确的除法结果
	 ** 说明：javascript 的除法结果会有误差，在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
	 ** 调用：div(arg1,arg2)
	 ** 返回值：arg1 除以 arg2 的精确结果
	 **/
	div(arg1, arg2) {
		let t1 = 0,
			t2 = 0
		try {
			t1 = arg1.toString().split('.')[1].length
		} catch (e) {
			// console.log('🚀109 行 e ➡️', e)
		}
		try {
			t2 = arg2.toString().split('.')[1].length
		} catch (e) {
			// console.log('🚀114 行 e ➡️', e)
		}
		if ((arg1 && arg2) || arg1 == 0 || arg2 == 0) {
			const r1 = Number(arg1.toString().replace('.', ''))
			const r2 = Number(arg2.toString().replace('.', ''))
			return (r1 / r2) * Math.pow(10, t2 - t1)
		} else {
			return null
		}
	},
}